package com.zyf.chapter02.behavior.observer.p2p.refactor;


import com.zyf.chapter02.behavior.observer.p2p.PromotionService;
import com.zyf.chapter02.behavior.observer.p2p.UserService;

import java.util.ArrayList;
import java.util.List;

/**
 * 新需求：用户注册成功之后，不再发送体验金，而是改为发放优惠券，并且还要给用户发送
 * 一封“欢迎注册成功”的站内信。
 * @author yifeng
 */
public class UserController {
    // 依赖注入
    private UserService userService;
    private List<RegObserver> regObservers = new ArrayList<>();

    /**
     * 一次性设置好，之后也不可能动态的修改
     * 添加新需求，只需要在添加一个实现了 RegObserver 接口的类，并通过
     * {@link UserController#setRegObservers(List)} 将它注册到
     * UserController 类中即可
     */
    public void setRegObservers(List<RegObserver> observers) {
        regObservers.addAll(observers);
    }

    /**
     * 提供用户注册的功能，发放优惠券，并且还要给用户发送一封“欢迎注册成功”的站内信。
     * @param telephone 手机号
     * @param password 密码
     * @return 自动生成的 userId
     */
    public Long register(String telephone, String password) {
        // 省略输入参数的校验代码
        // 省略 userService.register() 异常的 try-catch代码
        long userId = userService.register(telephone, password);
        for (RegObserver observer : regObservers) {
            observer.handleRegSuccess(userId);
        }
        return userId;
    }
}
